package com.anita.member.common;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * 文件信息封装类
 * 用于封装存储服务返回的文件详细信息
 * @author qiu
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class FileInfo {

    /**
     * 文件名
     */
    private String fileName;

    /**
     * 文件大小（字节）
     */
    private Long fileSize;

    /**
     * 文件类型/MIME类型
     */
    private String contentType;

    /**
     * 文件创建时间
     */
    private LocalDateTime createTime;

    /**
     * 文件最后修改时间
     */
    private LocalDateTime lastModified;

    /**
     * 文件访问URL
     */
    private String url;

    /**
     * 文件ETag（用于版本控制和缓存）
     */
    private String etag;

    /**
     * 存储类型（标准、低频、归档等）
     */
    private String storageClass;

    /**
     * 文件是否存在
     */
    private Boolean exists;

    /**
     * 创建成功的文件信息
     *
     * @param fileName 文件名
     * @param fileSize 文件大小
     * @param contentType 文件类型
     * @param createTime 创建时间
     * @param url 访问URL
     * @return 文件信息对象
     */
    public static FileInfo success(String fileName, Long fileSize, String contentType, 
                                 LocalDateTime createTime, String url) {
        FileInfo fileInfo = new FileInfo();
        fileInfo.setFileName(fileName);
        fileInfo.setFileSize(fileSize);
        fileInfo.setContentType(contentType);
        fileInfo.setCreateTime(createTime);
        fileInfo.setUrl(url);
        fileInfo.setExists(true);
        return fileInfo;
    }

    /**
     * 创建不存在的文件信息
     *
     * @param fileName 文件名
     * @return 文件信息对象
     */
    public static FileInfo notExists(String fileName) {
        FileInfo fileInfo = new FileInfo();
        fileInfo.setFileName(fileName);
        fileInfo.setExists(false);
        return fileInfo;
    }
}